Space ORG #8003 JP IntJP JP KillMan JP AddScore ExplSd JP mkExplSd FireSd JP mkLaserSd JP InitDisp ProjSd JP mkProjSd ManSd JP Ret MutSd JP mkMutSd JP GameLoop JP nSBombs JP SBombsd JP ManGrab JP ManDrop FTTSTg DEFS 3 WarpItIn DEFS 3 IOptrs JP KL JP KR JP KU JP KD JP KS JP KF ORG #9D00 Garb DEFB #C0,#30,#C,#3 ConYT DEFW 0,#50E0,#50C0,#50A0,#5080 DEFW #5060,#5040,#5020,#5000 DEFW #48E0,#48C0,#48A0,#4880 DEFW #4860,#4840,#4820,#4800 DEFW #40E0,#40C0,#40A0,#4080 DEFW #4060,#4040,#4020,#4000 pNFrame EQU 0 ; & 1 VSdel EQU 1 Sdel EQU 3 Mdel EQU 30 Ldel EQU 100 WSI EQU 15 ScoreR EQU 250 pScore EQU #4000+5 pShips EQU #4000+15 pBombs EQU #4000+22 pMen EQU #4000+29 Cset EQU #7B00 Wset EQU #7F00 pyAWC EQU #4800 pxAWC EQU #30 pyBON EQU #4820 pxBON EQU #30 pyChain EQU #4860 pxChain EQU #38 pyNXT EQU #48A0 pxNXT EQU #30 pyREP EQU #4840 pxREP EQU #40 pySPC EQU #50E0 pxSPC EQU #10 HighScores EQU #7300 pnFrame EQU #48B9 tw EQU 32 SdSpeed EQU 2 ORG #9E00 EntryPt DI:LD SP,0 JR Begin0 CallHL JP (HL) CallDE PUSH DE Ret RET CallBC PUSH BC RET Begin0 CALL CLS LD IX,LineYs LD HL,MessJK LD B,16 CALL PrintMess XOR A:LD (FullerConn),A CALL TurnOffSd Begin0b LD BC,57342:IN A,(C):BIT 4,A JR Z BeginFB LD BC,32766:IN A,(C):BIT 3,A JP Z Begin0Ex JR Begin0b BeginFB LD B,8 CALL PrintMess LD A,1:LD (FullerConn),A CALL TurnOnSd CALL WaitTS JP Begin0Ex PrintMess PUSH IX:PUSH BC:PUSH HL LD E,(IX):LD D,(IX+1) LD (CurY),DE XOR A LD (CurX),A CALL DWMess POP HL:POP BC:POP IX INC IX:INC IX CALL SkipTZ DJNZ PrintMess RET KL LD BC,65278:IN A,(C):BIT 1,A:RET Z LD BC,63486:IN A,(C):BIT 4,A:RET KR LD BC,65278:IN A,(C):BIT 2,A:RET Z LD BC,61438:IN A,(C):BIT 2,A:RET KU LD BC,32766:IN A,(C):BIT 3,A:RET Z LD BC,61438:IN A,(C):BIT 3,A:RET KD LD BC,32766:IN A,(C):BIT 2,A:RET Z LD BC,61438:IN A,(C):BIT 4,A:RET KS LD BC,49150:IN A,(C):OR #E0 INC A:JR Z KS1 XOR A RET KS1 INC A RET KF LD BC,61438:IN A,(C):BIT 0,A:RET Z LD BC,65022:IN A,(C):OR #E0 INC A:JR Z KF1 XOR A RET KF1 INC A RET JL IN A,(31):CPL:BIT 1,A:RET Jr IN A,(31):CPL:BIT 0,A:RET JU IN A,(31):CPL:BIT 3,A:RET JD IN A,(31):CPL:BIT 2,A:RET JF IN A,(31):CPL:BIT 4,A:RET JS LD BC,#00FE:IN A,(C):OR #E0 INC A:JR Z JS1 XOR A RET JS1 INC A RET FL IN A,(127):BIT 2,A:RET FR IN A,(127):BIT 3,A:RET FU IN A,(127):BIT 0,A:RET FD IN A,(127):BIT 1,A:RET FF IN A,(127):BIT 7,A:RET FS LD BC,#00FE:IN A,(C):OR #E0 INC A:JR Z FS1 XOR A RET FS1 INC A RET KinVec JP KL:JP KR:JP KU:JP KD:JP KS:JP KF JinVec JP JL:JP Jr:JP JU:JP JD:JP JS:JP JF FinVec JP FL:JP FR:JP FU:JP FD:JP FS:JP FF SetUpKbd LD HL,KinVec JR SU42 SetUpJsk LD HL,JinVec JR SU42 SetUpFul LD HL,FinVec SU42 LD DE,IOptrs LD BC,18 LDIR RET TurnOffSd LD A,#C9 TOSd1 LD (InitSound),A LD (Interupt),A LD (KillSd),A LD (mkExplSd),A LD (mkProjSd),A LD (ShipExplSd),A RET TurnOnSd XOR A:JR TOSd1 Begin0Ex LD HL,0:LD (Score),HL Begin CALL HighDisp LD A,1 LD (nFrames),A LD A,3 LD (nShips),A LD (nSmarts),A LD A,12 LD (nMen),A LD IY,StartSh LD HL,0 LD (Score),HL LD HL,1:LD (ManVal),HL CALL Game GameExit DI:LD SP,0 CALL KillSd CALL Report JR Begin HighDisp CALL CLS LD IX,LineYs LD HL,Mess6 LD B,4 CALL PrintMess XOR A:LD (HSDoneIt),A LD HL,HighScores LD A,1:LD (CurX),A LD A,"1 HighLoop PUSH AF:PUSH HL:PUSH IX LD E,(IX):LD D,(IX+1) LD (CurY),DE PUSH IX PUSH HL:CALL OutChar:POP HL POP IX CALL LeaveLine JP C HighL1 LD A,10:LD (CurX),A CALL DWMess LD A,0:LD (CurX),A POP IX:POP HL:POP AF CALL SkipTZ LD E,(HL):INC HL:LD D,(HL):INC HL PUSH HL:PUSH AF LD L,(IX):LD H,(IX+1) LD BC,27:ADD HL,BC PUSH IX:CALL DispNo:POP IX POP AF:POP HL HighL2 INC IX:INC IX INC A CP "9"+1 JR NZ HL1 LD A,"A HL1 CP "H JR NZ HighLoop INC HL:INC HL:LD (HSptr2),HL LD A,(HSDoneIt) OR A JR Z HL2 LD HL,(HSy):LD (CurY),HL LD A,10:LD (CurX),A CALL GetInput CALL InsertEnt LD HL,0:LD (Score),HL CALL HighDisp RET HL2 LD HL,pySPC:LD (CurY),HL LD A,pxSPC:LD (CurX),A LD HL,MessSPC CALL DWMess HL3 LD BC,49150:IN A,(C):BIT 3,A JR Z HL3Joy BIT 2,A JR Z HL3Key LD BC,32766:IN A,(C):BIT 0,A JR NZ HL3 RET HL3Joy LD A,(FullerConn) OR A JP NZ SetUpFul JP SetUpJsk HL3Key JP SetUpKbd WaitTS LD BC,32766:IN A,(C):BIT 0,A RET Z JR WaitTS InsertEnt LD BC,(GetIL):INC BC:INC BC:INC BC LD HL,(HSptr2) ADD HL,BC EX DE,HL LD HL,(HSptr2) PUSH HL:PUSH DE LD HL,(HSptr2):LD DE,(HSptr1) OR A:SBC HL,DE LD B,H:LD C,L INC BC POP DE:POP HL LDDR LD HL,GetIB LD DE,(HSptr1) LD BC,(GetIL) LDIR EX DE,HL LD (HL),0:INC HL LD DE,(Score) LD (HL),E:INC HL LD (HL),D RET GetInput CALL InitInt:LD HL,GetIB GetIl PUSH HL LD C,1 LD B,CurSpeed CALL PutCursor InLin2 DJNZ InLin3 LD A,C XOR 1 LD C,A CALL PutCursor LD B,CurSpeed InLin3 PUSH BC PUSH HL HALT POP HL:POP BC OR A JR Z,InLin2 BIT 0,C JR Z,InLin4 CALL PutCursor InLin4 POP HL CP 8 JP Z DelChar CP #D JR Z GetIEx PUSH HL PUSH AF CALL OutChar POP AF POP HL LD (HL),A INC HL LD A,(CurX) CP 214 JP NC DelChar JR GetIl GetIEx LD DE,GetIB OR A:SBC HL,DE JR Z Silly LD A,L:CP 100:JR NC Silly4 LD IX,GetIB LD DE,Insult LD B,7 Cpir LD A,(DE):CP (IX):INC DE:INC IX JR NZ CpirF DJNZ Cpir JP Silly2 CpirF LD (GetIL),HL CALL KillInt RET Silly4 LD HL,An5:JR Silly0 Insult DEFM /Cheese / Silly LD A,R:OR A:JP Z Silly1:AND #3 LD L,A LD H,0 LD DE,VecTab ADD HL,HL:ADD HL,DE LD A,(HL):INC HL:LD H,(HL):LD L,A Silly0 LD C,(HL):INC HL:LD B,0 LD (GetIL),BC LD DE,GetIB LDIR CALL KillInt RET VecTab DEFW An0,An1,An2,An3 An0 DEFB 9 DEFM /Someone ./ An1 DEFB 11 DEFM /Anonomous ./ An2 DEFB 10 DEFM /Somebody ./ An3 DEFB 24 DEFM /The Thing strikes back !/ An4 DEFB 10 DEFM /Lazy sod !/ An5 DEFB 32 DEFM /Bet yer wrist hurts after that !/ In0 DEFB 33 DEFM /I can't IMAGINE why they/ DEFM / bother !/ In1 DEFB 25 DEFM /The ULTIMATE in boredom !/ In2 DEFB 29 DEFM /Not all VIRGINS can program !/ In3 DEFB 28 DEFM /I can't stand ARCADE games !/ In4 DEFB 24 DEFM /CRYSTALS ain't solvent !/ In5 DEFB 38 DEFM /DESIGN DESIGN wot a wot/ DEFM / a silly name !/ In6 DEFB 17 DEFM /I reQUEST mercy !/ In7 DEFB 23 DEFM /ARTIC frigid software !/ InVec DEFW In0,In1,In2,In3,In4,In5,In6,In7 Silly1 LD HL,An4 JP Silly0 Silly2 LD A,(GetIB+7):AND #7:LD L,A:LD H,0 LD DE,InVec:ADD HL,HL:ADD HL,DE LD A,(HL):INC HL:LD H,(HL):LD L,A JP Silly0 PutCursor PUSH AF:LD A,(CurX):PUSH AF LD A,"_ PUSH BC:PUSH DE:PUSH HL:PUSH IX CALL OutChar POP IX:POP HL:POP DE:POP BC POP AF:LD (CurX),A POP AF RET DelChar EX DE,HL LD HL,GetIB OR A:SBC HL,DE EX DE,HL JP Z GetIl DEC HL LD A,(HL) PUSH HL LD L,A LD H,0 LD DE,#7F00 ADD HL,DE LD B,(HL) EX AF,AF' LD A,(CurX) SUB B LD (CurX),A EX AF,AF' CALL OutChar EX AF,AF' LD (CurX),A POP HL JP GetIl HighL1 POP IX LD L,(IX):LD H,(IX+1) LD BC,27:ADD HL,BC LD DE,(Score) PUSH IX:CALL DispNo:POP IX LD A,0:LD (CurX),A POP HL:POP AF JP HighL2 Report CALL CLS:LD HL,pyREP LD (CurY),HL LD A,pxREP LD (CurX),A LD HL,MessRep CALL DWMess LD HL,(Score) CALL PrintDec CALL Delay RET IntPage EQU #FE00 IntPageHigh EQU #FE IntVecByte EQU #80 IntRoutLoc EQU #8080 a EQU 1 b EQU 4 c EQU 2 CurSpeed EQU 10 ScanRate EQU 7 CharSet EQU #3C00 InitInt LD HL,IntPage LD DE,IntPage+1 LD BC,#100 LD (HL),IntVecByte LDIR LD HL,(#8081):LD (BasicI),HL LD HL,Interrupt:LD (#8081),HL DI IM 2 LD A,I LD (BasicI),A LD A,IntPageHigh LD I,A EI HALT ;Sync to first Int EI RETI KillInt DI LD HL,#8085:LD (#8081),HL RET KeyScan LD HL,kMap LD A,(HL) RLCA LD (HL),A IN A,(#FE) OR #E0 LD C,A INC HL LD A,(HL) LD D,0 INC A AND 7 LD (HL),A LD E,A INC E ADD HL,DE LD A,#FE IN A,(#FE) LD D,A LD A,#7F IN A,(#FE) RRCA RRCA RL D LD E,C KeyS0 LD A,E XOR (HL) RET Z LD C,A XOR A LD B,#FF SCF KeyS1 RLA INC B RRC C JR NC,KeyS1 LD C,A XOR (HL) LD (HL),A LD A,E AND C JR NZ,KeyS0 LD A,(kMap+1) LD C,A ADD A,A ADD A,A ADD A,C ADD A,B LD C,A LD B,0 LD HL,kTab ADD HL,BC LD BC,40 RR D JR C,KeyS2 ADD HL,BC KeyS2 RR D JR C,KeyS3 ADD HL,BC ADD HL,BC KeyS3 LD A,(HL) RET TonyChar EQU $ DEFB a,a,b,b DEFB a,a,b,b DEFB a,b,b,b DEFB a,b,b,b DEFB b,c,c,c DEFB b,c,c,c DEFB b,c,c,b DEFB b,c,c,b DEFB b,c,c,b DEFB b,c,c,b DEFB b,c,c,b DEFB b,b,b,b DEFB b,b,b,b DEFB a,b,a,b DEFB a,b,a,b DEFB a,b,a,b DEFB a,b,a,b DEFB a,b,a,b DEFB a,b,a,b DEFB a,b,a,a DEFB b,b,a,a DEFB b,b,a,a DEFB b,b,a,a DEFB b,a,a,a Interrupt PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX JR Remove LD B,#70 DJNZ $:INC BC DJNZ $ DJNZ $ LD B,24 LD IX,TonyChar IntRout1 LD D,(IX) LD E,(IX+1) LD H,(IX+2) LD L,(IX+3) LD A,a LD C,#FE OUT (C),D OUT (C),E OUT (C),H OUT (C),L OUT (C),H OUT (C),E OUT (C),D OUT (C),A LD DE,4 ADD IX,DE DJNZ IntRout1 Remove POP IX POP HL POP DE POP BC POP AF PUSH BC LD B,ScanRate IntLL2 PUSH BC CALL KeyScan OR A POP BC JR NZ,IntFin DJNZ IntLL2 IntFin POP BC EI:RETI BasicI DEFW 0 kMap DEFB #7F,7 DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF kTab EQU $ DEFB #00, "Z", "X", "C", "V" DEFB "A", "S", "D", "F", "G" DEFB "Q", "W", "E", "R", "T" DEFB "1", "2", "3", "4", "5" DEFB "0", "9", "8", "7", "6" DEFB "P", "O", "I", "U", "Y" DEFB #0D, "L", "K", "J", "H" DEFB #20,#00, "M", "N", "B" DEFB #00, ":", "`", "?", "/" DEFB #00,#00,#00,#00,#00 DEFB #00,#00,#00, "<", ">" DEFB "!", "@", "#", "$", "%" DEFB "_", ")", "(", "'", "&" DEFB #2C, ";",#00,#00,#00 DEFB #00, "=", "+", "-", "^" DEFB #00,#00, ".", ",", "*" DEFB #00, "z", "x", "c", "v" DEFB "a", "s", "d", "f", "g" DEFB "q", "w", "e", "r", "t" DEFB "1", "2", "3", "4", "5" DEFB #08, "9", "8", "7", "6" DEFB "p", "o", "i", "u", "y" DEFB #00, "l", "k", "j", "h" DEFB #20,#00, "m", "n", "b" DEFB #00, "Z", "X", "C", "V" DEFB "A", "S", "D", "F", "G" DEFB "Q", "W", "E", "R", "T" DEFB "1", "2", "3", "4", "5" DEFB "0", "9", "8", "7", "6" DEFB "P","O","I","U","Y" DEFB #0D, "L", "K", "J", "H" DEFB #00,#00, "M", "N", "B" Rand CALL Rand1:LD DE,(Seed):RET Rand1 LD HL,(Seed+2) RL L RL H RL L RL H LD C,H LD A,(Seed) RLA LD B,A LD DE,(Seed+1) RL E RL D RES 7,D LD HL,(Seed) ADD HL,BC LD (Seed),HL LD HL,(Seed+2) ADC HL,DE RES 7,H LD (Seed+2),HL RET M LD HL,Seed Rnd1 INC (HL) RET NZ INC HL JP Rnd1 Seed DEFW 1234,5678 EST DEFB 1,2,3,4,5,3,4,5,6,7,5,6,7,8,9,9 DEFB 1,2,#A,4,#D,3,4,5 DEFB 1,2,#A,4,#D,3,4,19 Explode CALL ShipExplSd:LD B,100 LD IY,ExplData Expllp PUSH BC ExplKKK CALL Rand LD A,E:OR D:JR Z ExplKKK LD A,(Seed+2):AND #1F:LD L,A:LD H,0 LD BC,EST:ADD HL,BC:LD A,(HL) LD (IY+3),A:LD (IY+4),A LD HL,0 CALL InitLine LD A,(Sp0):LD (IY+17),A LD A,(SpY):LD (IY+18),A LD (IY+15),0:LD (IY+16),0 LD (IY),0 POP BC LD DE,19:ADD IY,DE DJNZ Expllp LD A,(V0):LD B,A LD A,(Sp0) SUB B LD B,A:LD A,(SpY) LD L,A:LD H,0:ADD HL,HL LD DE,ConYT:ADD HL,DE LD A,(HL):INC HL:LD H,(HL) ADD A,B:LD L,A LD B,8 ExplKK1 LD (HL),0:INC H:DJNZ ExplKK1 INC L LD B,8 ExplKK2 DEC H:LD (HL),0:DJNZ ExplKK2 LD A,(V0):LD (DoP+1),A LD BC,1000 Expllp1 PUSH BC LD B,100 LD IX,ExplData Expllp2 BIT 0,(IX):JR NZ ExplL1:DEC (IX+3) JR NZ ExplL1 LD A,(IX+4):LD (IX+3),A PUSH BC CALL MoveBit POP BC ExplL1 LD DE,19:ADD IX,DE DJNZ Expllp2 POP BC DEC BC:LD A,C:OR B JR NZ Expllp1 RET InitLine LD (IY+7),1 LD (IY+8),1 LD A,L SUB E LD L,A JP Z ILine1A JP P ILine1 NEG LD (IY+7),#FF ILine1 LD E,A LD A,H SUB D LD H,A JP Z ILine2A JP P ILine2 NEG LD (IY+8),#FF ILine2 LD D,A SUB E JR NC ILine3 LD (IY+12),E SRA E LD (IY+10),E LD (IY+11),D LD A,(IY+7) LD (IY+13),A LD (IY+14),0 RET ILine3 EQU $ LD (IY+12),D SRA D LD (IY+10),D LD (IY+11),E LD A,(IY+8) LD (IY+14),A LD (IY+13),0 RET ILine1A LD (IY+7),0 JR ILine1 ILine2A LD (IY+8),0 JR ILine2 NextPoint LD A,(IX+10) SUB (IX+11) LD (IX+10),A JP P NextPoint1 LD A,(IX+15) ADD A,(IX+7) LD (IX+15),A LD L,A LD A,(IX+16) ADD A,(IX+8) LD (IX+16),A LD H,A LD A,(IX+10) ADD A,(IX+12) LD (IX+10),A OR A RET NextPoint1 LD A,(IX+15) ADD A,(IX+13) LD (IX+15),A LD L,A LD A,(IX+16) ADD A,(IX+14) LD (IX+16),A LD H,A OR A RET MoveBit BIT 1,(IX) JR Z ProjM2 LD L,(IX+5):LD H,(IX+6) CALL PjSh RES 1,(IX) ProjM2 CALL NextP JR NC DoP ProjM3 SET 0,(IX):RET DoP LD B,0 ;SMC LD A,(IX+1) SUB B CP 32 JR NC ProjM3 LD L,(IX+2) LD H,0 ADD HL,HL LD DE,ConYT ADD HL,DE ADD A,(HL) INC HL LD H,(HL) LD L,A LD (IX+5),L:LD (IX+6),H:SET 1,(IX) JP PjSh NextP CALL NextPoint RET C LD A,(IX+15) SRA A SRA A ADD A,(IX+17) LD (IX+1),A LD A,(IX+16) SRA A SRA A ADD A,(IX+18) LD (IX+2),A OR A JP P NextP1 SCF RET NextP1 CP 21;^ CCF RET PjSh LD A,(IX+16) AND 3 ADD A,A SUB H NEG ADD A,6 LD H,A LD A,(IX+15) AND 3 LD E,A LD D,Garb/256 LD A,(DE) XOR (HL) LD (HL),A INC H LD A,(DE) XOR (HL) LD (HL),A PjSh1 RET pReg EQU 63 pData EQU 95 ChSel EQU #E0 ;E0 ShipExplSd NOP:LD HL,BigBang LD B,0:JR InitLoop InitSound NOP:LD HL,InitData LD A,1:LD (IntDel),A LD B,0 InitLoop LD A,B:OUT (pReg),A LD A,(HL) OUT (pData),A INC HL INC B LD A,B CP 15 JR NZ InitLoop RET FuckSd PUSH AF:DI:CALL KillSd:CALL TurnOffSd EI:POP AF:RET EnableSd PUSH AF:CALL TurnOnSd:CALL InitSound POP AF:RET Interupt NOP LD HL,(pLaser) LD A,(HL) CP #FF JR Z Int2 LD A,9:OUT (pReg),A LD A,(HL) OUT (pData),A INC HL LD A,2:OUT (pReg),A LD A,(HL) OUT (pData),A INC HL LD (pLaser),HL Int2 LD HL,(pGrab) LD A,(HL) CP #FF JR Z Int3 LD A,10:OUT (pReg),A LD A,(HL) OUT (pData),A INC HL LD A,4:OUT (pReg),A LD A,(HL) OUT (pData),A INC HL LD (pGrab),HL Int3 LD HL,(pMut) ;Mutants only . LD A,(IntDel):DEC A:LD (IntDel),A RET NZ LD A,SdSpeed:LD (IntDel),A LD A,(HL) CP #FF JR Z Int4 LD A,5:OUT (pReg),A LD A,1:OUT (pData),A LD A,10:OUT (pReg),A LD A,(HL) OUT (pData),A INC HL LD A,4:OUT (pReg),A LD A,(HL) OUT (pData),A INC HL LD (pMut),HL Int4 LD A,15:OUT (pReg),A LD A,7 LD (#5800),A LD (#587F),A RET KillSd NOP:LD A,8:OUT (pReg),A XOR A:OUT (pData),A LD A,9:OUT (pReg),A XOR A:OUT (pData),A LD A,#A:OUT (pReg),A XOR A:OUT (pData),A RET mkExplSd NOP:LD A,#D OUT (pReg),A LD A,9 OUT (pData),A LD A,7:OUT (pReg),A LD A,ChSel:OUT (pData),A RET mkProjSd NOP:LD A,#D OUT (pReg),A LD A,9 OUT (pData),A LD A,7:OUT (pReg),A LD A,ChSel!#01:OUT (pData),A RET mkLaserSd LD HL,LaserTable LD (pLaser),HL RET ManGrab PUSH HL:PUSH DE:PUSH BC LD DE,#10 CALL AddScore LD HL,ManGTab LD (pGrab),HL POP BC:POP DE:POP HL RET ManDrop PUSH HL:PUSH DE:PUSH BC LD DE,#10 CALL AddScore LD HL,ManDTab LD (pGrab),HL POP BC:POP DE:POP HL RET mkMutSd LD A,R:AND #6:LD E,A:LD D,0 LD HL,MutTable:ADD HL,DE LD (pMut),HL RET InitData DEFB 3,#A DEFB 0,0 DEFB 0,4 DEFB #14 DEFB ChSel DEFB #10 DEFB #00 DEFB #00 DEFW #B00 DEFB 0 BigBang DEFB 1,#F DEFB 2,#F DEFB 3,#F DEFB #1F DEFB #C7 DEFB #10 DEFB #10 DEFB #10 DEFW #5800 DEFB 3 LaserTable DEFB #F,30 DEFB #F,30 DEFB #F,30 DEFB #E,50 DEFB #E,50 DEFB #E,50 DEFB #D,70 DEFB #D,70 DEFB #C,80 DEFB #B,90 DEFB #A,100 DEFB #9,110 DEFB #8,120 DEFB #7,130 DEFB #6,135 DEFB #5,140 DEFB #4,145 DEFB #3,148 DEFB #2,152 DEFB #1,153 DEFB #0,0 DEFB #FF,0 ManGTab DEFB #F,240 DEFB #F,235 DEFB #F,230 DEFB #F,225 DEFB #E,200 DEFB #E,160 DEFB #E,80 DEFB #D,60 DEFB #D,40 DEFB #C,30 DEFB #C,20 DEFB #B,14 DEFB #A,13 DEFB #9,12 DEFB 0,11 DEFB #FF,11 ManDTab DEFB #F,11 DEFB #F,12 DEFB #F,13 DEFB #F,14 DEFB #E,20 DEFB #E,30 DEFB #E,40 DEFB #D,60 DEFB #D,80 DEFB #C,160 DEFB #C,200 DEFB #B,225 DEFB #A,230 DEFB #8,235 DEFB #0,240 DEFB #FF,240 MutTable DEFB #F,230 DEFB #E,130 DEFB #D,100 DEFB #F,180 DEFB #E,150 DEFB #D,130 DEFB #F,110 DEFB #D,80 DEFB #E,120 DEFB #F,70 DEFB #F,110 DEFB #E,60 DEFB #F,100 DEFB #F,50 DEFB #D,80 DEFB #D,40 DEFB #E,70 DEFB #C,30 DEFB #C,50 DEFB #B,20 DEFB #D,30 DEFB #B,10 DEFB #A,100 DEFB #9,50 DEFB #8,80 DEFB #7,40 DEFB #4,70 DEFB #3,30 DEFB #4,50 DEFB #3,20 DEFB #2,30 DEFB 0,0 MutEnd DEFB #FF,0 pLaser DEFW MutEnd pGrab DEFW MutEnd pMut DEFW MutEnd LeaveLine PUSH DE:PUSH BC:PUSH HL LD A,(HSDoneIt):OR A:JR NZ LLexNC CALL SkipTZ LD E,(HL):INC HL:LD D,(HL) LD HL,(Score) OR A:SBC HL,DE JR C LLexNC JR Z LLexNC POP HL:PUSH HL LD (HSptr1),HL LD L,(IX):LD H,(IX+1) LD (HSy),HL LD A,1:LD (HSDoneIt),A POP HL:POP BC:POP DE SCF RET LLexNC POP HL:POP BC:POP DE OR A RET SkipTZ PUSH AF SkipTZl LD A,(HL) OR A JR Z SkipTZx INC HL JR SkipTZl SkipTZx INC HL:POP AF RET Game CALL InitSound:CALL Frame PUSH AF:CALL KillSd:POP AF ; A = 0 .. New frame ; A = 1 .. Killed OR A JR NZ Game1 CALL NewFrame JR Game Game1 PUSH IY:PUSH IX:CALL Explode POP IX:POP IY LD A,(nShips) DEC A LD (nShips),A JR NZ Game RET NewFrame LD L,(IY+pNFrame) LD H,(IY+pNFrame+1) PUSH HL POP IY LD A,(nFrames) INC A:DAA LD (nFrames),A CALL CLS CALL InitDisp LD HL,pyAWC LD (CurY),HL LD A,pxAWC LD (CurX),A LD HL,MessAWC CALL DWMess LD A,(nMen):OR A JP Z NewFrameE LD HL,pyBON LD (CurY),HL LD A,pxBON LD (CurX),A LD HL,MessBON CALL DWMess LD A,(nMen):LD B,A LD HL,pyChain:LD (CurY),HL LD A,pxChain:LD (CurX),A ChainLoop PUSH BC LD A,0:CALL OutChar CALL ChainDelay POP BC DJNZ ChainLoop LD HL,MessSCO CALL DWMess LD A,(nMen) CP 10 CALL NC PrintOne OR #30 CALL OutChar LD HL,MessX CALL DWMess LD HL,(ManVal) CALL PrintDec LD HL,MessEQ CALL DWMess LD A,(nMen) LD HL,(ManVal):LD D,H:LD E,L Mult DEC A:JR Z MultE PUSH AF LD A,L:ADD A,E:DAA:LD L,A LD A,H:ADC A,D:DAA:LD H,A POP AF JR Mult MultE LD D,H:LD E,L:CALL AddScore CALL PrintDec CALL DispScore CALL Delay NewFrameE LD HL,pyNXT LD (CurY),HL LD A,pxNXT LD (CurX),A LD HL,MessNXT CALL DWMess LD HL,pnFrame LD A,(nFrames) RRCA:RRCA:RRCA:RRCA AND #F CALL NZ PDig LD A,(nFrames) AND #F CALL PDig CALL Delay LD HL,(ManVal) LD A,L:INC A:DAA:LD L,A LD A,H:ADC A,0:DAA:LD H,A LD (ManVal),HL RET PrintOne SUB 10 PUSH AF LD A,"1 CALL OutChar POP AF RET PrintDec PUSH HL:POP DE:LD C,0 LD A,D AND #F0:RRCA:RRCA:RRCA:RRCA CALL PDec LD A,D AND #F CALL PDec LD A,E AND #F0:RRCA:RRCA:RRCA:RRCA CALL PDec LD A,E AND #F CALL PDec XOR A:CALL PDec2 RET PDec OR A JR Z PDec1 LD C,1 PDec2 PUSH DE:PUSH BC OR #30 CALL OutChar POP BC:POP DE RET PDec1 BIT 0,C JR NZ PDec2 RET ChainDelay LD BC,80:JR Del1 Delay LD BC,1500 Del1 DEC BC XOR A Del2 DEC A:JR NZ Del2 LD A,C:OR B JR NZ Del1 RET RET Frame PUSH IY:POP HL:INC HL:INC HL LD (pWarp),HL:INC HL:LD A,(HL) LD (WarpTime),A LD A,WSI LD (WarpSpeed),A XOR A:LD (nMenWarped),A CALL #8000 RET IntJP LD A,(WarpSpeed) DEC A LD (WarpSpeed),A JP NZ Interupt LD A,WSI LD (WarpSpeed),A LD A,(WarpTime) DEC A LD (WarpTime),A JP NZ Interupt LD IX,(pWarp) LD A,(IX) OR A JR Z WSetFlag CP #90 JR NC WarpDisc CP #80 JR NC WarpMen WarpFirst INC IX INC IX LD (pWarp),IX WarpInT CALL WarpInAcc LD A,(IX+1) LD (WarpTime),A JP Interupt WarpMen LD A,(nMenWarped) OR A LD B,A JR Z WarpMen1 WarpMen2 LD A,(nMen) CP B JR Z WarpMenEx INC B LD A,B LD (nMenWarped),A LD A,6 JR WarpInT WarpMen1 LD A,(IX) AND #F JR Z WarpMen2 LD C,A LD A,(nMen) ADD A,C CP 13 JR NC WarpMen1a LD A,12 WarpMen1a LD (nMen),A JR WarpMen2 WarpMenEx INC IX:INC IX LD A,(IX) JR WarpFirst WSetFlag LD A,1:LD (Started),A LD A,Ldel:LD (WarpTime),A INC IX:INC IX:LD (pWarp),IX RET WarpDisc LD A,(IX+1):LD (WarpTime),A LD A,4 WarpInAcc OR A:RET Z:PUSH AF PUSH IX:CALL FTTSTg:POP IX:JR C WarpIA POP AF:LD D,A PUSH IX:CALL WarpItIn:POP IX RET WarpIA POP AF:RET JP WarpItIn AddScore PUSH HL LD HL,(Score) LD A,L ADD A,E DAA LD L,A CALL C Extras LD A,H ADC A,D DAA LD H,A JR C Overflow LD (Score),HL POP HL RET Overflow CALL Explode JR Overflow Extras PUSH AF LD A,H CP #01 JR Z Extras1 CP 3 JR Z Extras1 CP #09 JR Z Extras1 CP #49 JR Z Extras1 POP AF RET Extras1 LD A,(nShips):INC A:LD (nShips),A LD A,(nSmarts):INC A:LD (nSmarts),A POP AF RET GameLoop LD A,(ScoreD) DEC A LD (ScoreD),A RET NZ LD BC,63486:IN A,(C) BIT 0,A:CALL Z FuckSd BIT 1,A:CALL Z EnableSd BIT 2,A:JP Z GameExit BIT 3,A:JP Z EntryPt DispScore CALL DispRest LD A,ScoreR LD (ScoreD),A LD DE,(Score) LD HL,pScore DispNo LD C,0 LD A,D AND #F0:RRCA:RRCA:RRCA:RRCA CALL PDig LD A,D AND #F CALL PDig LD A,E AND #F0:RRCA:RRCA:RRCA:RRCA CALL PDig LD A,E AND #F CALL PDig XOR A:CALL PDig2 RET PDig OR A JR Z PDig1 LD C,1 PDig2 PUSH HL:PUSH DE LD E,A LD D,0 LD IX,DigTab ADD IX,DE LD DE,10 LD B,7 PDigL LD A,(IX) LD (HL),A INC H ADD IX,DE DJNZ PDigL POP DE:POP HL INC L RET PDig1 BIT 0,C JR NZ PDig2 RET InitDisp CALL DispScore LD HL,#4000 LD (CurY),HL LD A,0 LD (CurX),A LD HL,Mess1 CALL DWMess LD HL,#4000 LD (CurY),HL LD A,#58 LD (CurX),A LD HL,Mess2 CALL DWMess LD HL,#4000 LD (CurY),HL LD A,#88 LD (CurX),A LD HL,Mess3 CALL DWMess LD HL,#4000 LD (CurY),HL LD A,#C0 LD (CurX),A LD HL,Mess4 CALL DWMess RET CLS LD HL,#4000:LD DE,#4001:LD BC,#1800 LD (HL),0:LDIR:LD BC,#300:LD (HL),#F LDIR:LD A,1:OUT (#FE),A:RET Mess1 DEFM /Score/ NOP Mess2 DEFM /Ships/ NOP Mess3 DEFM /Bombs/ NOP Mess4 DEFM /Women/ NOP MessAWC DEFM /Attack Wave Completed/ NOP MessBON DEFM /Bonus for women remaining/ NOP MessSCO DEFM / i.e. / NOP MessNXT DEFM /Prepare for Attack Wave :-/ NOP MessX DEFM / x / NOP MessEQ DEFM / = / NOP MessRep DEFM /You scored :- / NOP MessSPC DEFM !Press K/J/SPACE to continue .! NOP MessJK DEFM /Invasion of the Body / DEFM /Snatchers !/ NOP NOP DEFM /Written by Design Design / DEFM /Software/ NOP NOP DEFM /Simon Brattel and Neil / DEFM /Mottershead/ NOP NOP DEFM /Artwork by Dave de-Leuw/ NOP NOP DEFM /Produced by Crystal Computing/ NOP NOP NOP NOP NOP DEFM /Do you have a Fuller Box/ DEFM / connected ?/ NOP NOP DEFM /Press Y or N/ NOP NOP DEFM /If you wish to use a joystick/ DEFM / at some stage/ NOP DEFM /it must be plugged into the / DEFM /Fuller Box ./ NOP:NOP:NOP:NOP:NOP DEFM /Press SPACE to continue ./ NOP Mess6 DEFM / Invasion of the Body / DEFM /Snatchers !/ NOP NOP DEFM / Hall of Fame/ NOP NOP DispRest LD A,(nShips) LD HL,pShips CALL PDig2 LD A,(nSmarts) LD HL,pBombs CALL PDig2 LD A,(nMen) LD HL,pMen CALL Mdsp RET KillMan PUSH IX:PUSH IY:PUSH HL:PUSH DE PUSH BC:PUSH AF CALL KillMan1 POP AF:POP BC:POP DE:POP HL:POP IY POP IX RET Mdsp LD HL,pMen CP 10 JR C KMsd1 LD A,1:CALL PDig2:LD A,(nMen):SUB 10 CALL PDig2 RET KMsd1 LD B,8 KMsd2 LD (HL),0:INC H:DJNZ KMsd2 LD HL,pMen+1 LD A,(nMen) CALL PDig2 RET KillMan1 LD A,(nMen):DEC A:LD (nMen),A JR Z KM1 CALL Mdsp RET KM1 CALL Mdsp RET nSBombs LD A,(nSmarts) RET SBombsd LD A,(nSmarts) DEC A LD (nSmarts),A RET DWMess LD A,(HL):OR A:RET Z INC HL PUSH HL CALL OutChar POP HL JR DWMess OutChar PUSH AF LD L,A:LD H,0 ADD HL,HL:ADD HL,HL:ADD HL,HL LD DE,Cset ADD HL,DE PUSH HL:POP IX LD A,(CurX) RRCA:RRCA:RRCA AND #1F LD DE,(CurY) OR E LD E,A LD A,(CurX) AND #7 LD C,A LD B,8 OutCharL CALL GetHL LD A,(DE):XOR H:LD (DE),A INC E LD A,(DE):XOR L:LD (DE),A DEC E INC IX:INC D DJNZ OutCharL POP AF LD L,A:LD H,0 LD DE,Wset ADD HL,DE LD B,(HL) LD A,(CurX) ADD A,B LD (CurX),A LD A,1:LD A,1 LD A,1 RET GetHL LD H,(IX):LD L,0 LD A,C GetHLlp OR A JR NZ GetHLsh RET GetHLsh DEC A SRL H:RR L JR GetHLlp DigTab DEFB #1C,8,#1C,#3E,4,#3E,#E,#3E,#1C,#1C DEFB #22,#18,#22,2,#C,#20,#10,2,#22,#22 DEFB #26,8,2,4,#14,#3C,#20,4,#22,#22 DEFB #2A,8,#C,#C,#24,2,#3C,8,#1C,#1E DEFB #32,8,#10,2,#3E,2,#22,#10,#22,2 DEFB #22,8,#20,#22,4,#22,#22,#10,#22,4 DEFB #1C,#1C,#3E,#1C,4,#1C,#1C,#10,#1C,#38 StartSh DEFW Sht1 :DEFB #80,VSdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht1 DEFW Sht2 :DEFB #80,VSdel DEFB 2,Sdel,2,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht2 DEFW Sht3 :DEFB #80,VSdel DEFB 2,Sdel,2,Sdel,2,Sdel,2,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht3 DEFW Sht4 :DEFB #80,VSdel DEFB 2,Sdel,2,Sdel,2,Sdel,3,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht4 DEFW Sht5 :DEFB #80,VSdel DEFB 2,Sdel,2,Sdel,3,Sdel,3,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht5 DEFW Sht6 :DEFB #80,VSdel DEFB 2,Sdel,3,Sdel,3,Sdel,3,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht6 DEFW Sht7 :DEFB #80,VSdel DEFB 2,Sdel,3,Sdel,3,Sdel,3,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht7 DEFW Sht8 :DEFB #80,VSdel DEFB 2,Sdel,3,Sdel,3,Sdel,3,Sdel DEFB 4,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Mdel Sht8 DEFW Sht9 :DEFB #80,VSdel DEFB 2,Sdel,3,Sdel,3,Sdel,3,Sdel DEFB 4,Sdel,4,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel DEFB 0,1,#FF,Sdel Sht9 DEFW ShtA :DEFB #80,VSdel DEFB 2,Sdel,3,Sdel,3,Sdel,3,Sdel DEFB 4,Sdel,4,Sdel DEFB 5,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Mdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Sdel,1,Sdel DEFB 0,1,#FF,Sdel ShtA DEFW ShtB :DEFB #80,VSdel DEFB 2,Sdel,3,Sdel,3,Sdel,3,Sdel DEFB 4,Sdel,4,Sdel DEFB 5,Sdel,5,Sdel,1,Sdel,1,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 1,Sdel,1,Sdel DEFB 0,1,#FF,Sdel ShtB DEFW ShtB :DEFB #80,VSdel DEFB 2,Sdel,3,Sdel,3,Sdel,3,Sdel DEFB 4,Sdel,4,Sdel DEFB 5,Sdel,5,Sdel,5,Sdel,5,Sdel DEFB 1,Sdel,1,Sdel,1,Sdel,1,Sdel DEFB 0,1,#FF,Sdel nShips DEFB 0 nMen DEFB 0 nMenWarped DEFB 0 ManVal DEFW 1 nFrames DEFB 0 nSmarts DEFB 0 Score DEFW 0 ScoreD DEFB 15 pWarp DEFW 0 WarpSpeed DEFB 0 WarpTime DEFB 0 CurX DEFB 0 CurY DEFW #4000 HSptr1 DEFW 0 HSptr2 DEFW 0 HSptr3 DEFW 0 HSy DEFW 0 HSDoneIt DEFB 0 FullerConn DEFB 0 IntDel DEFB 1 LineYs DEFW #4000,#4020,#4040,#4060 DEFW #4080,#40A0,#40C0,#40E0 DEFW #4800,#4820,#4840,#4860 DEFW #4880,#48A0,#48C0,#48E0 DEFW #5000,#5020,#5040,#5060 DEFW #5080,#50A0,#50C0,#50E0 GetIB DEFS 110 GetIL DEFW 0 ORG #BB00 :DISP #D000 - $ DEFS 2 DEFS 2 DEFS 1 DEFS 1 Started DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 Sp0 DEFS 1 DEFS 1 SpY DEFS 1 DEFS 1 V0 DEFS 1 DEFS 1 DEFS 2 DEFS 2 DEFS 1 DEFS 1 DEFS 1 DEFS 2 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 2 DEFS 1 DEFS 1 DEFS 1 DEFS 1 DEFS 2 ORG $!#FF + 1 IntTab DEFS #101 DEFS 400 DTl DEFS #800 EndDTl DEFS 400 ORG $!#FF + 1 ExplData EQU $ BigMaze DEFS #1800 MountH DEFS #100 ManH DEFS #100 pTgT DEFS #200 TgTl DEFS #1000 LrTl DEFS #100 ExTabl DEFS #800